package icasue.net.protocol.carfun.commands;

/**
 * @Author: Qiao Hang
 * @CreateDate: 2021/3/23 上午10:18
 * @UpdateDate:
 * @Description: MDCommand (Model Define Command) 用于定义或改变各个socket的状态，
 * 客户端socket发送的Command均为MDCommand,
 *      服务端扩展CarFunProtocol需要：
 *      1.扩充一个或多个 MDCommand实例
 *      2.注册一个或多个 MDCommandDriver，用于处理客户端发送的MDCommand，控制客户端行为.
 *      3.注册一个或多个 MDCommandDriverProvider 管理上一步注册的 MDCommandDriver
 *      4.将上一步注册的 MDCommandDriverProvider 装载入 CommandDriverManager
 *
 *      notice: MDCommand 与 EventCommand 的连接纽带在 MDCommanderDriver的处理逻辑中，MDCommanderDriver处理完客户端的change行为，
 *              发送EventCommand 被channel线程处理，处理会使用 支持EventCommand解析的 EventCommandDriver.
 */
public interface MDCommand extends Command{

    enum Client implements MDCommand{
        //终断Socket连接
        CLIENT_CONNECT_END;
        @Override
        public String getCommand() {
            return this.name();
        }
    }

    enum Channel implements MDCommand{
        //channel创建
        CHANNEL_CREATE,
        //channel加入
        CHANNEL_JOIN,
        //退出组队订阅.
        CHANNEL_QUIT;
        @Override
        public String getCommand() {
            return this.name();
        }
    }

}
